package com.wgy.day36常见的函数式接口.Predicate接口;

import java.util.function.Predicate;

/**
 * Created by pc on 2020/12/10 22:53
 * Description: LearningJava
 */
/*
需求:判断一个字符串,有两个判断的条件
     1.判断字符串的长度是否大于5
     2.判断字符串中是否包含a

     两个条件满足一个即可,我们就可以使用||运算符连接两个条件

Predicate接口中的默认方法:or,表示或者关系,也可以用于连接两个判断条件

default Predicate<T> or(Predicate<? super T>other ){
Objects.requireNonNull(other);
return (t)->this.test(t)||other.test(t)
}
方法内部的两个判断,使用的也是||连接起来的
*/
public class Demo03PredicateOr {

     /*定义一个方法,参数传递String类型的字符串
       传递两个Predicate接口,泛型使用String
       一个用来判断字符串的长度是否大于5
       另一个用来判断字符串中是否包含a
       两个条件满足一个即可
   */
     public static boolean checkString(String s, Predicate<String> pre1,Predicate<String> pre2){
       //return pre1.test(s)||pre2.test(s);
       return pre1.or(pre2).test(s);//等价于return pre1.test(s)||pre2.test(s);
     }

    public static void main(String[] args) {
         //定义一个字符串
        String s="CDEFa";
        //调用checkString方法,参数传递字符串和Lambda表达式
        boolean b = checkString(s,
                (String str)->{
            return str.length()>5;},
                (String str)->{
           return str.contains("a");
                }

        );
        System.out.println(b);


    }
}
